/* eslint-disable */
import API from "@/api/api";
import util from "./util";

export const signature = (jsApiList = [], debug = true, successCb, failCb) => {
  const nonceStr = util.randomString(8);
  const timestamp = new Date().getTime();
  API.get("getSignature", {
    noncestr: nonceStr,
    timestamp,
    url: location.href.split("#")[0],
  })
    .then((result) => {
      window.wx.config({
        beta: true, // 调用wx.invoke形式的接口值时，该值必须为true。
        debug, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
        appId: result.corpid, // 必填，eLink的cropID
        timestamp, // 必填，生成签名的时间戳
        nonceStr, // 必填，生成签名的随机串
        signature: result.signature, // 必填，签名，见附录1
        jsApiList, // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
      });
      window.wx.ready(() => {
        console.log("wx success");
        // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，
        // config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。
        // 对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
        successCb && successCb();
      });
      window.wx.error((res) => {
        console.log("wx error", res);
        // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，
        // 也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
        failCb && failCb(res);
      });
    })
    .catch((err) => {
      console.log("err", err);
    });
};

export const agentConfigSignature = (cb) => {
  const nonceStr = util.randomString(8);
  const timestamp = new Date().getTime();
  API.get("getAgentConfigSignature", {
    noncestr: nonceStr,
    timestamp,
    url: location.href.split("#")[0],
  }).then((result) => {
    const params = {
      agentid: result.agentid, // 必填，企业应用的agentid
      corpid: result.corpid, // 必填，eLink的corpid
      timestamp, // 必填，生成签名的时间戳,int类型, 如 1539100800
      nonceStr, // 必填，生成签名的随机串
      signature: result.signature, // 必填，签名，见附录5
    };
    window.wx.invoke("agentConfig", params, (res) => {
      // 错误处理
      if (res.err_msg !== "agentConfig:ok") {
        if (cb) cb(res);
        return;
      }
      // 这里可以调用用户数据接口
      if (cb) cb(null);
    });
  });
};

export default {
  signature,
  agentConfigSignature,
};
